/*
 * Copyright (c) 2006-2021, Ulandlink Development Team
 * SPDX-License-Identifier: Apache-2.0
 * Change Logs:
 * Date           Author       Notes
 * 2022-02-15     lfz         first version
 */
#ifndef __FTP_CLIENT_H__
#define __FTP_CLIENT_H__

#ifdef __cplusplus
 extern "C" {
#endif
 
#include <rtthread.h>
#include "os_types.h"

struct ftpclient_urlinfo
{
    char *buffer;  //缓存区
    char *user;    //用户名
    char *pw;      //用户密码
    char *host;    //服务器地址
    char *path;    //文件路径
    int port;      //端口号
};

int ftpclient_type(int c_sock, char mode);

int ftpclient_cwd(int c_sock, char *path);
 
int ftpclient_pwd(int c_sock);

int ftpclient_pasv_connect(int c_sock);

int ftpclient_cmd_size(int c_sock, char *path, int *fileszie);

int ftpclient_cmd_retr(int c_sock, char *path);

int ftpclient_sendcmd( int sock, char *cmd, int *fileszie);
    
int ftpclient_close_socket(int socket);

int ftpclient_read(int socket, void *buffer, size_t length);

int ftpclient_send(int socket, const void *buffer, size_t length);

/**
 * @brief 从url获取ftpurlinfo信息
 * url格式：ftp://user:password@hostname:port/path/filename
 * @param url 
 * @param res 
 * @return int 
 */
int ftpclient_get_urlinfo(const char *url, struct ftpclient_urlinfo *res);

/**
 * @brief 释放ftpurlinfo资源，用了get_ftpurlinfo需要用此函数释放资源
 * @param res 
 */
void ftpclient_free_urlinfo(struct ftpclient_urlinfo *res);

/**
 * @brief 连接ftp服务器
 * @param host 服务器地址
 * @param port 服务器端口
 * @param user 用户名
 * @param pwd 密码
 * @return int <=0, 失败；>0 ftp连接socket句柄
 */
int ftpclient_connect(const char *host, int port, const char *user, const char *pwd );

/**
 * @brief 断开ftp服务器连接
 * @param c_sock socket句柄
 * @return int 
 */
int ftpclient_quit(int c_sock);

/**
 * @brief 从指定url下载文件
 * @param url 服务器地址，格式: ftp://test:test@192.168.0.1:21/test/v01.ota
 * @param ofile 保存文件
 * @return int 0-成功
 */
int ftpclient_get_file(const char *url, const char* filename);

/**
 * @brief 上传文件到指定url
 * @param url 服务器地址，格式: ftp://test:test@192.168.0.1:21/test/v01.ota
 * @param sfile 本地文件
 * @return int 0-成功
 */
int ftpclient_put_file(const char *url, const char* filename);

#ifdef __cplusplus
}
#endif

#endif